{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Quantum Kernel Machine Learning\n",
    "\n",
    "## Overview\n",
    "\n",
    "The general task of machine learning is to find and study patterns in data. For many datasets, the datapoints are better understood in a higher dimensional feature space. This is the fundamental principle behind a series of machine learning algorithms known as *kernel methods*.\n",
    "\n",
    "In this notebook, you will learn how to define quantum kernels using `qiskit-machine-learning` and how these can be plugged into different algorithms to solve classification and clustering problems.\n",
    "\n",
    "All examples used in this tutorial are based on this reference paper: [_Supervised learning with quantum enhanced feature spaces_](https://arxiv.org/pdf/1804.11326.pdf).\n",
    "\n",
    "The content is structured as follows:\n",
    "\n",
    "1. [Introduction](#1.-Introduction)\n",
    "2. [Classification](#2.-Classification)\n",
    "3. [Clustering](#3.-Clustering)\n",
    "4. [Kernel Principal Components Analysis](#4.-Kernel-Principal-Component-Analysis)\n",
    "5. [Conclusion](#5.-Conclusion)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Introduction\n",
    "\n",
    "### 1.1. Kernel Methods for Machine Learning\n",
    "\n",
    "Kernel methods are a collection of pattern analysis algorithms that use kernel functions to operate in a high-dimensional feature space. The best-known application of kernel methods is in **Support Vector Machines (SVMs)**, supervised learning algorithms commonly used for classification tasks. The main goal of SVMs is to find decision boundaries to separate a given set of data points into classes. When these data spaces are not linearly separable, SVMs can benefit from the use of kernels to find these boundaries.\n",
    "\n",
    "Formally, decision boundaries are hyperplanes in a high dimensional space. The kernel function implicitly maps input data into this higher dimensional space, where it can be easier to solve the initial problem. In other words, kernels may allow data distributions that were originally non-linearly separable to become a linearly separable problem. This is an effect known as the \"kernel trick\".\n",
    "\n",
    "There are use-cases for kernel-based unsupervised algorithms too, for example, in the context of clustering. **Spectral Clustering** is a technique where data points are treated as nodes of a graph, and the clustering task is viewed as a graph partitioning problem where nodes are mapped to a space where they can be easily segregated to form clusters.\n",
    "\n",
    "### 1.2. Kernel Functions\n",
    "\n",
    "Mathematically, kernel functions follow:\n",
    "\n",
    "$k(\\vec{x}_i, \\vec{x}_j) = \\langle f(\\vec{x}_i), f(\\vec{x}_j) \\rangle$\n",
    "\n",
    "where \n",
    "* $k$ is the kernel function\n",
    "* $\\vec{x}_i, \\vec{x}_j$ are $n$ dimensional inputs\n",
    "* $f$ is a map from $n$-dimension to $m$-dimension space and \n",
    "* $\\langle a,b \\rangle$ denotes the inner product\n",
    "\n",
    "When considering finite data, a kernel function can be represented as a matrix: \n",
    "\n",
    "$K_{ij} = k(\\vec{x}_i,\\vec{x}_j)$.\n",
    "\n",
    "### 1.3. Quantum Kernels\n",
    "\n",
    "The main idea behind quantum kernel machine learning is to leverage quantum feature maps to perform the kernel trick. In this case, the quantum kernel is created by mapping a classical feature vector $\\vec{x}$ to a Hilbert space using a quantum feature map $\\phi(\\vec{x})$. Mathematically:\n",
    "\n",
    "$K_{ij} = \\left| \\langle \\phi(\\vec{x}_i)| \\phi(\\vec{x}_j) \\rangle \\right|^{2}$\n",
    "\n",
    "where \n",
    "* $K_{ij}$ is the kernel matrix\n",
    "* $\\vec{x}_i, \\vec{x}_j$ are $n$ dimensional inputs\n",
    "* $\\phi(\\vec{x})$ is the quantum feature map\n",
    "* $\\left| \\langle a|b \\rangle \\right|^{2}$ denotes the overlap of two quantum states $a$ and $b$\n",
    "\n",
    "Quantum kernels can be plugged into common classical kernel learning algorithms such as SVMs or clustering algorithms, as you will see in the examples below. They can also be leveraged in new quantum kernel methods like [QSVC](https://qiskit-community.github.io/qiskit-machine-learning/stubs/qiskit_machine_learning.algorithms.QSVC.html) class  provided by `qiskit-machine-learning` which is explored in this tutorial, and other methods as shown in later tutorials on [Pegasos QSVC](07_pegasos_qsvc.ipynb) and [Quantum Kernel Training](08_quantum_kernel_trainer.ipynb).\n",
    "\n",
    "***\n",
    "\n",
    "Before introducing any example, we set up the global seed to ensure reproducibility:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit_machine_learning.utils import algorithm_globals\n",
    "\n",
    "algorithm_globals.random_seed = 12345"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Classification\n",
    "\n",
    "This section illustrates a quantum kernel classification workflow using `qiskit-machine-learning`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1. Defining the dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For this example, we will use the _ad hoc dataset_ as described in the reference [paper](https://arxiv.org/pdf/1804.11326.pdf). \n",
    "\n",
    "We can define the dataset dimension and get our train and test subsets:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit_machine_learning.datasets import ad_hoc_data\n",
    "\n",
    "adhoc_dimension = 2\n",
    "train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(\n",
    "    training_size=20,\n",
    "    test_size=5,\n",
    "    n=adhoc_dimension,\n",
    "    gap=0.3,\n",
    "    plot_data=False,\n",
    "    one_hot=False,\n",
    "    include_sample_total=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This dataset is two-dimensional, the two features are represented by the $x$ and $y$ coordinates, and it has two class labels: A and B. We can plot it and see what the distribution looks like. We define utility functions to plot the dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "def plot_features(ax, features, labels, class_label, marker, face, edge, label):\n",
    "    # A train plot\n",
    "    ax.scatter(\n",
    "        # x coordinate of labels where class is class_label\n",
    "        features[np.where(labels[:] == class_label), 0],\n",
    "        # y coordinate of labels where class is class_label\n",
    "        features[np.where(labels[:] == class_label), 1],\n",
    "        marker=marker,\n",
    "        facecolors=face,\n",
    "        edgecolors=edge,\n",
    "        label=label,\n",
    "    )\n",
    "\n",
    "\n",
    "def plot_dataset(train_features, train_labels, test_features, test_labels, adhoc_total):\n",
    "\n",
    "    plt.figure(figsize=(5, 5))\n",
    "    plt.ylim(0, 2 * np.pi)\n",
    "    plt.xlim(0, 2 * np.pi)\n",
    "    plt.imshow(\n",
    "        np.asmatrix(adhoc_total).T,\n",
    "        interpolation=\"nearest\",\n",
    "        origin=\"lower\",\n",
    "        cmap=\"RdBu\",\n",
    "        extent=[0, 2 * np.pi, 0, 2 * np.pi],\n",
    "    )\n",
    "\n",
    "    # A train plot\n",
    "    plot_features(plt, train_features, train_labels, 0, \"s\", \"w\", \"b\", \"A train\")\n",
    "\n",
    "    # B train plot\n",
    "    plot_features(plt, train_features, train_labels, 1, \"o\", \"w\", \"r\", \"B train\")\n",
    "\n",
    "    # A test plot\n",
    "    plot_features(plt, test_features, test_labels, 0, \"s\", \"b\", \"w\", \"A test\")\n",
    "\n",
    "    # B test plot\n",
    "    plot_features(plt, test_features, test_labels, 1, \"o\", \"r\", \"w\", \"B test\")\n",
    "\n",
    "    plt.legend(bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
    "    plt.title(\"Ad hoc dataset\")\n",
    "\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we actually plot the dataset for classification:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": [
     "nbsphinx-thumbnail"
    ]
   },
   "outputs": [
    {
     "data": {
      "image/png": "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mqWePXtGFjuyNWeef/55BckDDzzg/o1PtD14Uti9997rXmfpR5cuXZTqPvnkE1177bU67rjj1LhxY/Xo0UOvv/56om8LSSRuYSOIW9Pb+iP2Oi1kBcWqVat000036dVXX9XKlSv1n//8RxdffLH7XqSqk08+2b3Z2iaF9gP4wgsv1KWXXqp33nlHQbBu3TrNnj3bBa4gOO2007Rz587I45VXXlEq27Nnj84991wdc8wxLkS/++67mjFjhrKzsxN9a0gmXpycddZZ3k033RR5fvDgQa9169be9OnTvSCwb/XixYu9oNm1a5d77atWrfKCJDs723viiSe8VLd3716vc+fO3sqVK70LLrjAu+2227xUds8993i9evXyguTHP/6x961vfSvRt4EkF5eejfDW9LYVfXW3pkdqyM/Pdx9btGihILBdkZ999lnXkxOEJfytF2v48OFR/2+nuq1bt7qh0Y4dO2rs2LFuU8lUtmzZMrdi9JVXXumGRk8//XQ9/vjjib4tJJm4hI3Ktqa3VUiRmmzfHBvDty7Y7t27K5W9/fbbatasmVtd8Yc//KEWL16sbt26KZVZqLIhUavTCQqrNXvqqafcqslWq7N9+3add955bhfTVPXBBx+419q5c2etWLFCN954o2699VY9/fTTib41JBHft5hHcNlvvXl5eSk/pm1OPfVUbdiwwfXkLFy40O0fZPUrqRo4bJvx2267zdXlWMF3UAwbNizyZ6tRsfDRrl07LViwQNdff71S9ZcG69m4//773XPr2bD/rx999FH37xyoNz0bNdmaHsnt5ptv1vLly/Xyyy+7AspUZzsid+rUye2KbL/pW2HwzJkzlapsWNSKu/v06aP09HT3sHD10EMPuT9bT2YQHHvssTrllFO0bds2papWrVodFZq7du2a8sNHSMKwwdb0wWG1sBY0bBjhr3/9qzp06KAgsn/fRUVFSlUXXXSRGzqy3pzww377tRoG+7P9chEE+/bt0/vvv+/ekFOVDYOWnb6+ZcsW16MD1LthlCBuTW8/iEr/xmPju/aD2Iol27Ztq1QdOnnmmWe0dOlSt9ZGuCYnKyvLzc9PRZMmTXLd6/Z3amP39vpzc3Pd+Haqsr/bsnU4TZs2deswpHJ9zp133unWzrE32n/9619uKr8Fq2uuuUap6vbbb1f//v3dMMqYMWPc+kiPPfaYewDVFs+pL7/+9a+9tm3beg0bNnRTYV999VUvlb388stu2mfZx7hx47xUVd7rtcfcuXO9VPW9733Pa9eunft33bJlS++iiy7yXnzxRS9ogjD19aqrrvJatWrl/q6/8Y1vuOfbtm3zUt2f/vQnr3v37l5GRobXpUsX77HHHkv0LSHJsMU8AADwFXujAAAAXxE2AACArwgbAADAV4QNAADgK8IGAADwFWEDAAD4irABAAB8RdgAAAC+ImwAAABfETYAAICvCBsAAMBXhA0AACA//X+pTIc5akIYaQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_dataset(train_features, train_labels, test_features, test_labels, adhoc_total)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2. Defining the quantum kernel\n",
    "\n",
    "The next step is to create a quantum kernel instance that will help classify this data. \n",
    "\n",
    "We use the [FidelityQuantumKernel](https://qiskit-community.github.io/qiskit-machine-learning/stubs/qiskit_machine_learning.kernels.FidelityQuantumKernel.html) class, and pass two input arguments to its constructor: \n",
    "\n",
    "1. `feature_map`: in this case, a two-qubit [zz_feature_map](https://quantum.cloud.ibm.com/docs/en/api/qiskit/qiskit.circuit.library.zz_feature_map).\n",
    "\n",
    "2. `fidelity`: in this case, the [ComputeUncompute](https://qiskit-community.github.io/qiskit-algorithms/stubs/qiskit_algorithms.state_fidelities.ComputeUncompute.html) fidelity subroutine that leverages the [Sampler](https://quantum.cloud.ibm.com/docs/api/qiskit/1.4/qiskit.primitives.Sampler) primitive.\n",
    "\n",
    "**NOTE:** If you don't pass a `Sampler` or `Fidelity` instance, then the instances of the reference `Sampler` and `ComputeUncompute` classes (found in `qiskit.primitives`) will be created by default."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from qiskit.circuit.library import zz_feature_map\n",
    "from qiskit.primitives import StatevectorSampler as Sampler\n",
    "from qiskit_machine_learning.state_fidelities import ComputeUncompute\n",
    "from qiskit_machine_learning.kernels import FidelityQuantumKernel\n",
    "\n",
    "adhoc_feature_map = zz_feature_map(feature_dimension=adhoc_dimension, reps=2, entanglement=\"linear\")\n",
    "\n",
    "sampler = Sampler()\n",
    "\n",
    "fidelity = ComputeUncompute(sampler=sampler)\n",
    "\n",
    "adhoc_kernel = FidelityQuantumKernel(fidelity=fidelity, feature_map=adhoc_feature_map)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3. Classification with SVC\n",
    "The quantum kernel can now be plugged into classical kernel methods, such as the [SVC](https://scikit-learn.org/stable/modules/svm.html) algorithm from `scikit-learn`. This algorithm allows us to define a [custom kernel](https://scikit-learn.org/stable/modules/svm.html#custom-kernels) in two ways:\n",
    "\n",
    "1. by providing the kernel as a **callable function**\n",
    "2. by precomputing the **kernel matrix**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Kernel as a callable function\n",
    "\n",
    "We define a SVC model and directly pass the `evaluate` function of the quantum kernel as a callable. Once the model is created, we train it by calling the `fit` method on the training dataset and evaluate the model for accuracy with `score`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Callable kernel classification test score: 1.0\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "\n",
    "adhoc_svc = SVC(kernel=adhoc_kernel.evaluate)\n",
    "\n",
    "adhoc_svc.fit(train_features, train_labels)\n",
    "\n",
    "adhoc_score_callable_function = adhoc_svc.score(test_features, test_labels)\n",
    "\n",
    "print(f\"Callable kernel classification test score: {adhoc_score_callable_function}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Precomputed kernel matrix\n",
    "\n",
    "Instead of passing a function of the quantum kernel as a callable, we can also precompute training and testing kernel matrices before passing them to the `scikit-learn` `SVC` algorithm. \n",
    "\n",
    "To extract the train and test matrices, we can call `evaluate` on the previously defined kernel and visualize them graphically as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzYAAAGiCAYAAAA1J1M9AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAbEdJREFUeJzt3Qd4FWX2+PE3vRcSSkLvRaqCICCIgCAqomJviAr2AqKCqwiIi22ti6Cuiq4KioougqAi4A8FFBRpggRBQq/ppN//c2b/N5vEZM6EBHIHvp/nuWIyJ3PfOzM3mXPfcvw8Ho/HAAAAAICL+Vd3AwAAAACgskhsAAAAALgeiQ0AAAAA1yOxAQAAAOB6JDYAAAAAXI/EBgAAAIDrkdgAAAAAcD0SGwAAAACuR2IDAAAAwPVIbFxqxowZxs/Pz2zfvt027qabbjKRkZHmVCDHY8KECcf0s40bN7aO1Ykm50/a/dxzzxm3WbJkidV2+dfN5LzL+QcAAO5GYlPNXn31VevmsFu3buZkN3/+/GNOPABNVlaWdX25PdECAADHJvAYfw5V5P3337c+Lf7xxx9NUlKSad68uTmZE5upU6cet+Tm6NGjJjDw2C7pzZs3G39/8ny3JzYTJ060/r9Pnz6Of+6NN94whYWFx7FlAADgROBOrhpt27bN/PDDD+b55583tWrVspIc/Fd+fr7Jzc2t0M+EhoYec2ITEhJigoKCzMl6w4+/yszMtP6V8y7nHwAAuBuJTTWSRKZGjRrmwgsvNJdffnm5ic2GDRtM3759TVhYmKlfv76ZPHlyhT9h3rVrl7nkkkus+TaSRI0ZM8YUFBT85UbvgQceMA0aNLBu9Fq1amXN/fB4PH/Z33vvvWe6du1qwsPDrdfQu3dv89VXX9nOY5DeGiFD77yP0vNMXnzxRdOsWTPr+Tdu3GglN+PHjzedO3c2MTExJiIiwvTq1cssXrxYnWMj/y/fk54wef7Y2FhrH8OHD//LzX7pOTbeOUzff/+9GT16tHXM5LkvvfRSc+DAgRI/K+dCnqtu3brW8Tj33HOtth/rvB053iNHjjTBwcHm008/LXHM5TjIdRAXF2euvvpqk5ycXOJnpaeiXbt2ZvXq1dY5kfY88sgjJY7x66+/XnSMzzzzTPPTTz/9pQ2bNm2yrkl5HkkYu3TpYv7zn/+YY+E9D7///ru5/vrrrXMgx/Oxxx6zXqu8hiFDhpjo6GiTkJBg/vGPf5T4eSfXgLw+2aeQXhvv9eW9HrxzzbZu3WouuOACExUVZa677roy59g8/vjjVu/dokWLSrTDe05+/fXXYzoOAADg+GIoWjWSROayyy6zbpauueYaM23aNOsmU242vfbu3WvdKEsPxtixY62bOrkxlZtbpySBGThwoDWPR25sv/nmG+vmUW5u77jjDitGbjAvvvhi62bxlltuMZ06dTILFy40Dz74oJUUvfDCC0X7kxtHuWHs0aOHmTRpktX+lStXmm+//dYMGDCgzDbcdtttZvfu3ebrr782//73v8uMefvtt012drZ1Ayk33XJTnZaWZv71r39Zx2fEiBEmPT3dvPnmm9brkeF70k7NlVdeaZo0aWKmTJlifv75Z2t/tWvXNk8//bT6s/fcc4+VuMnNrtw8S+J19913mw8//LAoZty4ceaZZ54xgwcPttolN77yr7yWipJzdfPNN1v7nzNnjpX0iieffNJKBOS13HrrrVZy9corr1jJyy+//GIlbV6HDh0ygwYNshIfSSTq1KlTtO2DDz6wjqGcD7nxl3bLNfjHH38U9VhJIt2zZ09Tr169omvuo48+shLjTz75xErujsVVV11l2rRpY5566ikzb948K0GXc/zaa69ZibucD3lPSNIt7wF5bcLJNSBJjbx/5HqW9slrEh06dCh6fnkPyc+cffbZ1vtAkr6yPProo2bu3LnW+2DdunVWEiTvBRmy9sQTT5iOHTse0+sHAADHmQfVYtWqVdIN4vn666+trwsLCz3169f33HfffSXi7r//fitu5cqVRd/bv3+/JyYmxvr+tm3bbJ9n2LBhVtykSZNKfP/000/3dO7cuejrzz77zIqbPHlyibjLL7/c4+fn50lKSrK+3rJli8ff399z6aWXegoKCkrEymuwc9ddd1nPUZq8Bvl+dHS09dqKy8/P9+Tk5JT43pEjRzx16tTx3HzzzSW+L/t4/PHHi76W/5fvlY6TtsfHx5f4XqNGjaxj5fX2229bP9u/f/8Sr2vUqFGegIAAT0pKivX13r17PYGBgZ5LLrmkxP4mTJhg/XzxfZbF+9qfffZZT15enueqq67yhIWFeRYuXFgUs337dus5n3zyyRI/u27dOuu5i3//nHPOsfY3ffr0Mp9HXvfhw4eLvv/5559b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n332Wev6kuO3d+9ec/bZZ5s333zT1K9f30yePNm89tpr5tChQ9Z18vbbb5u4uP8VWP7888/N66+/bn755RcrRn5GrptHHnmk6DqV17d06dKicycaNWpkPb8cD7kWZs6caZ0j2b+cn8OHD5s1a9ZY2xYvXmzt47fffjNnnHGGueKKK8y7775b1IZly5aZc845xzrP8v6ASxIbAABQveSG8rLLLjPBwcHWDeW0adPMTz/9ZM4888yiGLk5lBuy/Px8M3bsWBMREWHd/MnNo1MFBQVm4MCB1jye5557zkpu5MazWbNm5o477rBi5MZcbp7lxu+WW24xnTp1MgsXLjQPPviglRS98MILRfuTG3lJEnr06GEmTZpktV9uoOVmvLzE5rbbbjO7d+82X3/9tXUTX9Z27w37vffea/Vm/fOf/7Rucr///nsTFBRkJVuyf+ndkmMRGxtr3dB++umn1j7k+3IM5TVdeuml1rEVHTp0sD0+cjMr+7jzzjtNVFSUlWANHTrU7Nixw0okhbRDEp3ExETr9csxldcuz3ksvvjiCyuZveqqq6ykTG7cJYHt2bOnlTR5z7UkKJL8fPLJJ9ZrKk7aK88viU/xHhtJcKSt8vqvvPJKK/F5+OGHreRz0KBBRYmknG957SNHjjRt2rQx69ats87z77//bj777LNjvqZzc3OtRFwSimeeecZqQ9++fa3EQ9ohQy5feeUVK3mQ1+4l518Wuhg9erT1r1xP8trS0tKshElIUpuammp27txZdE2WXhxDEjO5JmX/krzJ/5cmr1fi5PqW8yDHQo6hJFKtW7e2zi3+isQGAAD8hfQ4yKfzcoMn5JNt+YRabgyLJzbyqfGBAwesxKFr167W96S3pUULvQe8+HAcuYF+7LHHrK+lx0c+rZZP0r2JzX/+8x/rRlI+VZebRyGf+Msn2i+99JK5++67rURIbkrlpk9usuWGufjQHrtei+7du5uWLVtaic31119fYpvcXP/rX/+yXvu1115b9H1J6OQGffbs2db3Zdie3LRLT0eXLl2K4qTNQhIBuUmV1yTJTOnnKY98er9x40br9Xmft2PHjtYn//K6vb0+knxIkuXtLZMbdrlBrihJoq6++mrrJnr69OlFx1B6VRo2bGglt94eE0le5NqQhKB0YiO9HYsWLSrR6yYkgZReiBtuuMH6WhJV6dWQ8+1N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",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "adhoc_matrix_train = adhoc_kernel.evaluate(x_vec=train_features)\n",
    "adhoc_matrix_test = adhoc_kernel.evaluate(x_vec=test_features, y_vec=train_features)\n",
    "\n",
    "fig, axs = plt.subplots(1, 2, figsize=(10, 5))\n",
    "\n",
    "axs[0].imshow(\n",
    "    np.asmatrix(adhoc_matrix_train), interpolation=\"nearest\", origin=\"upper\", cmap=\"Blues\"\n",
    ")\n",
    "axs[0].set_title(\"Ad hoc training kernel matrix\")\n",
    "\n",
    "axs[1].imshow(np.asmatrix(adhoc_matrix_test), interpolation=\"nearest\", origin=\"upper\", cmap=\"Reds\")\n",
    "axs[1].set_title(\"Ad hoc testing kernel matrix\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To use these matrices, we set the `kernel` parameter of a new `SVC` instance to `\"precomputed\"`. We train the classifier by calling `fit` with the training matrix and training dataset. Once the model is trained, we evaluate it using the test matrix on the test dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Precomputed kernel classification test score: 1.0\n"
     ]
    }
   ],
   "source": [
    "adhoc_svc = SVC(kernel=\"precomputed\")\n",
    "\n",
    "adhoc_svc.fit(adhoc_matrix_train, train_labels)\n",
    "\n",
    "adhoc_score_precomputed_kernel = adhoc_svc.score(adhoc_matrix_test, test_labels)\n",
    "\n",
    "print(f\"Precomputed kernel classification test score: {adhoc_score_precomputed_kernel}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.4. Classification with QSVC\n",
    "\n",
    "`QSVC` is an alternative training algorithm provided by `qiskit-machine-learning` for convenience. It is an extension of `SVC` that takes in a quantum kernel instead of the `kernel.evaluate` method shown before."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "QSVC classification test score: 1.0\n"
     ]
    }
   ],
   "source": [
    "from qiskit_machine_learning.algorithms import QSVC\n",
    "\n",
    "qsvc = QSVC(quantum_kernel=adhoc_kernel)\n",
    "\n",
    "qsvc.fit(train_features, train_labels)\n",
    "\n",
    "qsvc_score = qsvc.score(test_features, test_labels)\n",
    "\n",
    "print(f\"QSVC classification test score: {qsvc_score}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5. Evaluation of models used for classification"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification Model                    | Accuracy Score\n",
      "---------------------------------------------------------\n",
      "SVC using kernel as a callable function |       1.00\n",
      "SVC using precomputed kernel matrix     |       1.00\n",
      "QSVC                                    |       1.00\n"
     ]
    }
   ],
   "source": [
    "print(f\"Classification Model                    | Accuracy Score\")\n",
    "print(f\"---------------------------------------------------------\")\n",
    "print(f\"SVC using kernel as a callable function | {adhoc_score_callable_function:10.2f}\")\n",
    "print(f\"SVC using precomputed kernel matrix     | {adhoc_score_precomputed_kernel:10.2f}\")\n",
    "print(f\"QSVC                                    | {qsvc_score:10.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As the classification dataset is small, we find that the three models achieve 100% accuracy."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Clustering\n",
    "\n",
    "The second workflow in this tutorial focuses on a clustering task using `qiskit-machine-learning` and the spectral clustering algorithm from `scikit-learn`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1. Defining the dataset\n",
    "\n",
    "We will once again use the _ad hoc dataset_, but now generated with a higher gap of `0.6` (previous example: `0.3`) between the two classes. \n",
    "\n",
    "Note that clustering falls under the category of unsupervised machine learning, so a test dataset is not required."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "adhoc_dimension = 2\n",
    "train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(\n",
    "    training_size=25,\n",
    "    test_size=0,\n",
    "    n=adhoc_dimension,\n",
    "    gap=0.6,\n",
    "    plot_data=False,\n",
    "    one_hot=False,\n",
    "    include_sample_total=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " We plot the clustering dataset below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfYAAAHDCAYAAADWXDiiAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOD5JREFUeJzt3Ql8VOW9//HfhJCAQGLQKCCrggIiIIoiiqKAQFlcqqgX/gLa1raoqNUrlFZFQWy99qrVAqIX2ouUAsoiURCsYG2hLF7UWGQTFBUELSYQNRBy/q/fk5wxk0ySSTLLmed83q/XMMyZk5kzS/I9zx5wHMcRAABghZREHwAAAIgegh0AAIsQ7AAAWIRgBwDAIgQ7AAAWIdgBALAIwQ4AgEUIdgAALEKwAwBgEYLdYnPmzJFAICB79uypcr8xY8ZI48aNxcv0GNu2bSt+tGLFCunevbs0aNDAfJ5ff/11Qo9nzZo15jj0Ohn17dvXXABbEexJ4A9/+IP5Q3rhhRcm+lCS0qOPPipLliwRL/jXv/4lDz30ULUnW66vvvpKRowYIQ0bNpRnn31W/vd//1caNWokNvvHP/5h3qNEn8AAyYpgTwIvvviiKa1u2LBBdu7cmejDSTpeC/bJkydHHOwbN26Uw4cPyyOPPCK33nqrjBo1SurXry+2B7u+R7EK9tdff91cAFsR7B63e/du84fud7/7nWRnZ5uQh38cOHDAXJ944olRe8yCggLxo2+++cZcp6WlmQtgK4Ld4zTIs7KyZMiQIXLddddVGuwffPCBXHHFFabKtmXLljJlyhQpLi6u0XN99tlncvXVV5v2dj2JuPfee+X48eMVQuEXv/iFtGrVStLT0+Wss86S//qv/5JwiwTOnTtXLrjgAjnhhBPMa7j00ksjKilp6bpLly6mTVmvFy9eHHY/fd7evXvLSSedZF73eeedJ4sWLQrZR5sw9Jj/+Mc/mv/rRdvr1ccffyw///nPzWvQn9fHuf766yuUpo8dO2ZKkB06dDDHpPtdcsklsmrVqpD9PvzwQ/MZNW3a1Ox3/vnny7Jly0L6POjjq8svvzx4PJW1VWs78OjRo83/e/bsGXLsauHCheY167GffPLJpjSvn2G4/hO7du2SH/zgB9KkSRMZOXJkle+/PobWDrRo0cJ8xu3atZOf/exncvTo0Up/RmuUyh5bVe3Zv//97+Xss88Ofi/0fZo3b565T6vg77vvPvN/fV73PSr7mej3yn3d+l7feOONsnfv3grPq9+dzZs3m++dPtcvf/nLsMfk9hlYsGCBTJ061fz+6OfXr1+/sDVk2iRy+umnm+fX7/ff/vY32u3hKamJPgBUTYP82muvNSWMm266SaZPn26qZ/UPvWv//v0mKIqKimTChAmmDfa5554zf3gipQE+cOBA046vgbl69Wp54okn5IwzzjB/1JWG9/Dhw+XNN980f/i1Q9fKlSvNH2INg//+7/8OPp4Gof6R1uB9+OGHzfH/85//lL/+9a9y5ZVXVnocGvw//OEPpXPnzjJt2jTTxjx27Fjzx7a8p556yhyPBpWGzvz5801wLl++3JwIKW2T/tGPfmT+AP/kJz8x2/Q1KX0ftTZEg0EfX8ND31/9A61V5hoGSl+HHov7OPn5+bJp0yZ55513ZMCAAcETq4svvlhOO+204GegQaEnSi+99JJcc801JmDuvPNOefrpp03IdOrUyfyse13epEmTzEmHfpb6HmrQuceuJwn6vuj3QI/tiy++MO/H3//+d/m///u/kBK+fi/0s9WTEf1s3dcVzueff25eo1aD6/vVsWNH89nqCZOWeOta0p01a5Z5D/QEaPz48fLdd9/Je++9Z74b//Ef/2G+69u3b5c///nP5vukJyxKTzSVBu+vf/1r0+9AP4+DBw+aEwV9b8u/bv3uDB482Hy+etJz6qmnVnlsjz32mKSkpJgT2ry8PPntb39rvlt6bC79ftx+++3Sp08fufvuu813Rj9jPUEJ9x0FEkLXY4c3bdq0SYvBzqpVq8zt4uJip2XLls748eND9rvrrrvMfv/85z+D2w4cOOBkZmaa7bt3767yeUaPHm32e/jhh0O2n3vuuc55550XvL1kyRKz35QpU0L2u+6665xAIODs3LnT3N6xY4eTkpLiXHPNNc7x48dD9tXXUJXu3bs7zZs3d77++uvgttdff908b5s2bUL2/eabb0JuHz161OnSpYtzxRVXhGxv1KiReY3llf95tW7dOvNcf/rTn4LbunXr5gwZMqTK4+7Xr59zzjnnON99913Ia+3du7fToUOH4LaFCxeax3/zzTedSMyePdvsv3HjxpDXecopp5jX+u233wa3L1++3Oz7wAMPVPhsJ0yYENHz3XzzzeazK/t8ZV+P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VYdLvPPOO9KtWzez3OuBAwfEVjq+X1+nntD4xdq1a2XcuHGyfv16WbVqlRw7dkyuvPJK817YqmXLlibYdIEk/WN3xRVXyFVXXSUffPCB+MHGjRtl5syZ5uTGD84++2zZt29f8PL222+LzQ4dOiQXX3yx1K9f35yw/utf/5InnnhCsrKyEn1oqIwTJxdccIEzbty44O3jx487LVq0cKZNm+b4gb7VixcvdvzmwIED5rWvXbvW8ZOsrCzn+eefd2x3+PBhp0OHDs6qVaucyy67zBk/frxjswcffNDp1q2b4yf333+/c8kllyT6MFADcSmxu8u96vKukS73Cju4y/Q2bdpU/EBXP5w/f76pofDDNMtaOzNkyJCQ323b7dixwzSvnX766TJy5EizoJXNli1bZmYavf76603z2rnnniuzZs1K9GGhCnEJ9qqWe9XZ62AnXUdA21y1Gq9Lly5is/fff18aN25sZuX66U9/KosXL5bOnTuLzfQERpvVtF+FX2jfoDlz5pjZNrVvxe7du6VPnz5mtTJbffTRR+a1dujQQVauXCk/+9nP5M4775Q//vGPiT40JGrZVviXluZyc3Otb4NUZ511lmzZssXUUCxatMisp6D9DWwNd126c/z48aYfhXaG9YvBgwcH/699CjTodRnqBQsWyK233iq2nqBrif3RRx81t7XErr/XM2bMMN9z+LTEXpvlXpHcbr/9dlm+fLm8+eabpnOZ7XTlw/bt25vVD7UEq50mn3rqKbGVNq1px9cePXpIamqqueiJzNNPP23+rzV0fnDiiSfKmWeeKTt37hRbNW/evMIJaqdOnaxvgkhmcQl2lnv1D+0nqKGuVdF//etfpV27duJH+v0uLCwUW/Xr1880P2gthXvRUp22Oev/9UTeD44cOSK7du0y4WcrbUorP2R1+/btpqYCPq+K9+Nyr/pLX/ZMXtvj9I+ediRr3bq12Fr9Pm/ePFm6dKkZy+72ocjMzDTjX200ceJEU0Wrn6m2terrX7NmjWmPtJV+tuX7TTRq1MiMc7a5P8W9995r5qbQUPv888/N8F09ibnpppvEVnfffbf07t3bVMWPGDHCzD/y3HPPmQs8yomj3//+907r1q2dtLQ0M/xt/fr1js3efPNNM9Sr/GX06NGOrcK9Xr3Mnj3bsdUtt9zitGnTxnyvs7OznX79+jmvv/664zd+GO52ww03OM2bNzef9WmnnWZu79y507HdK6+84nTp0sVJT093Onbs6Dz33HOJPiRUgWVbAQCwCHPFAwBgEYIdAACLEOwAAFiEYAcAwCIEOwAAFiHYAQCwCMEOAIBFCHYAACxCsAMAYBGCHQAAixDsAABYhGAHAEDs8f8B2Ce6vnfLrukAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(5, 5))\n",
    "plt.ylim(0, 2 * np.pi)\n",
    "plt.xlim(0, 2 * np.pi)\n",
    "plt.imshow(\n",
    "    np.asmatrix(adhoc_total).T,\n",
    "    interpolation=\"nearest\",\n",
    "    origin=\"lower\",\n",
    "    cmap=\"RdBu\",\n",
    "    extent=[0, 2 * np.pi, 0, 2 * np.pi],\n",
    ")\n",
    "\n",
    "# A label plot\n",
    "plot_features(plt, train_features, train_labels, 0, \"s\", \"w\", \"b\", \"B\")\n",
    "\n",
    "# B label plot\n",
    "plot_features(plt, train_features, train_labels, 1, \"o\", \"w\", \"r\", \"B\")\n",
    "\n",
    "plt.legend(bbox_to_anchor=(1.05, 1), loc=\"upper left\", borderaxespad=0.0)\n",
    "plt.title(\"Ad hoc dataset for clustering\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2. Defining the Quantum Kernel\n",
    "We use an identical setup as in the classification example. We create another instance of the `FidelityQuantumKernel` class with a `zz_feature_map`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "adhoc_feature_map = zz_feature_map(feature_dimension=adhoc_dimension, reps=2, entanglement=\"linear\")\n",
    "\n",
    "adhoc_kernel = FidelityQuantumKernel(fidelity=fidelity, feature_map=adhoc_feature_map)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3. Clustering with the Spectral Clustering Model\n",
    "\n",
    "The `scikit-learn` spectral clustering algorithm allows us to define a custom kernel in two ways (just like `SVC`):\n",
    "\n",
    "1. by providing the kernel as a **callable function**\n",
    "2. by precomputing the **kernel matrix**. \n",
    "\n",
    "With the current `FidelityQuantumKernel` class in `qiskit-machine-learning`, we can only use the latter option, so we precompute the kernel matrix by calling `evaluate` and visualize it as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "adhoc_matrix = adhoc_kernel.evaluate(x_vec=train_features)\n",
    "\n",
    "plt.figure(figsize=(5, 5))\n",
    "plt.imshow(np.asmatrix(adhoc_matrix), interpolation=\"nearest\", origin=\"upper\", cmap=\"Greens\")\n",
    "plt.title(\"Ad hoc clustering kernel matrix\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we define a spectral clustering model and fit it using the precomputed kernel. Further, we score the labels using normalized mutual information, since we know the class labels a priori (before hand)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Clustering score: 0.7287008798015754\n"
     ]
    }
   ],
   "source": [
    "from sklearn.cluster import SpectralClustering\n",
    "from sklearn.metrics import normalized_mutual_info_score\n",
    "\n",
    "adhoc_spectral = SpectralClustering(2, affinity=\"precomputed\")\n",
    "\n",
    "cluster_labels = adhoc_spectral.fit_predict(adhoc_matrix)\n",
    "\n",
    "cluster_score = normalized_mutual_info_score(cluster_labels, train_labels)\n",
    "\n",
    "print(f\"Clustering score: {cluster_score}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Kernel Principal Component Analysis\n",
    "\n",
    "This section focuses on a Principal Component Analysis task using a kernel PCA algorithm. We calculate a kernel matrix using a `zz_feature_map` and show that this approach translates the original features into a new space, where axes are chosen along principal components. In this space the classification task can be performed with a simpler model rather than an SVM."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1. Defining the dataset\n",
    "\n",
    "We again use the _ad hoc dataset_ with a gap of `0.6` between the two classes. This dataset resembles the dataset we had in the clustering section, the difference is that in this case `test_size` is not zero."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "adhoc_dimension = 2\n",
    "train_features, train_labels, test_features, test_labels, adhoc_total = ad_hoc_data(\n",
    "    training_size=25,\n",
    "    test_size=10,\n",
    "    n=adhoc_dimension,\n",
    "    gap=0.6,\n",
    "    plot_data=False,\n",
    "    one_hot=False,\n",
    "    include_sample_total=True,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We plot the training and test datasets below. Our ultimate goal in this section is to construct new coordinates where the two classes can be linearly separated."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_dataset(train_features, train_labels, test_features, test_labels, adhoc_total)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2. Defining the Quantum Kernel\n",
    "\n",
    "We proceed with the same kernel setup as it was in the classification task, namely a `zz_feature_map` circuit as a feature map and an instance of `FidelityQuantumKernel`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_map = zz_feature_map(feature_dimension=2, reps=2, entanglement=\"linear\")\n",
    "qpca_kernel = FidelityQuantumKernel(fidelity=fidelity, feature_map=feature_map)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Then, we evaluate kernel matrices for the training and test features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "matrix_train = qpca_kernel.evaluate(x_vec=train_features)\n",
    "matrix_test = qpca_kernel.evaluate(x_vec=test_features, y_vec=train_features)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3. Comparison of Kernel PCA on gaussian and quantum kernel\n",
    "\n",
    "In this section we use the `KernelPCA` implementation from `scikit-learn`, with the `kernel` parameter set to \"rbf\" for a gaussian kernel and \"precomputed\" for a quantum kernel. The former is very popular in classical machine learning models, whereas the latter allows using a quantum kernel defined as `qpca_kernel`.\n",
    "\n",
    "One can observe that the gaussian kernel based Kernel PCA model fails to make the dataset linearly separable, while the quantum kernel succeeds.\n",
    "\n",
    "While usually PCA is used to reduce the number of features in a dataset, or in other words to reduce dimensionality of a dataset, we don't do that here. Rather we keep the number of dimensions and employ the kernel PCA, mostly for visualization purposes, to show that classification on the transformed dataset becomes easily tractable by linear methods, like logistic regression. We use this method to separate two classes in the principal component space with a `LogisticRegression` model from `scikit-learn`. As usual we train it by calling the `fit` method on the training dataset and evaluate the model for accuracy with `score`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.decomposition import KernelPCA\n",
    "\n",
    "kernel_pca_rbf = KernelPCA(n_components=2, kernel=\"rbf\")\n",
    "kernel_pca_rbf.fit(train_features)\n",
    "train_features_rbf = kernel_pca_rbf.transform(train_features)\n",
    "test_features_rbf = kernel_pca_rbf.transform(test_features)\n",
    "\n",
    "kernel_pca_q = KernelPCA(n_components=2, kernel=\"precomputed\")\n",
    "train_features_q = kernel_pca_q.fit_transform(matrix_train)\n",
    "test_features_q = kernel_pca_q.transform(matrix_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we train and score a model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Logistic regression score: 0.95\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "logistic_regression = LogisticRegression()\n",
    "logistic_regression.fit(train_features_q, train_labels)\n",
    "\n",
    "logistic_score = logistic_regression.score(test_features_q, test_labels)\n",
    "print(f\"Logistic regression score: {logistic_score}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's plot the results. First, we plot the transformed dataset we get with the quantum kernel. On the same plot we also add model results. Then, we plot the transformed dataset we get with the gaussian kernel."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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5MlakSJFVKODsqW///67Tbl5fG72ZYZLly6t1kep8IULF2pW48k+vfzyy8nr4nvWrFkzbcOGDZpVGOXL7W/GPuAn9sn+OZUqVVL7hCDe/H8qFPdpzJgxqsFC8Iv/O/Xr19eWL18exD2gYB1DrRpkebofzv4P4IZ1AyVcjv+e7AfOjxy97zhRDjZPPw8rBlne7Mfq1avVRQecF6HNGjlyZMAuNvhiHzDtwuuvv57cTsXHx2v/93//55NpR6K0NPeFERERERERkYHVBYmIiIiIiHyIQRYREREREZEPMcgiIiIiIiLyIQZZREREREREPsQgi4iIiIiIyIcYZBEREREREfkQgywiIiIiIiIfYpBFYaVYsWIyadIkn/29p556Stq0aSO+tHLlSomKipKzZ8/69O8SEZE1sW0iijwMssiS0IDgYI9bpkyZpGTJkjJ8+HC5ceOGy+f9+eef8swzz/hsO95++22ZMWOGz/4e+Q6+G/Pnz/foOWPHjpUOHTqo3z///HO5//77U6zz999/S926dSVz5swSHx8vb731ls+2mYhCG9smSg3bJjJkSP6NyGKaNm0q06dPl6tXr8oPP/wgL7zwgmTMmFEGDBiQYt1r166pBi9Pnjw+3Ybs2bP79O9RcK1Zs0YaNmyofv/111+lTp06No+fP39eGjduLI0aNZKpU6fK5s2bpWvXrpIjRw6fniARUehi20S+xrYpPLEniywrOjpa8ufPL0WLFpXnn39eHVy+++47m1SJkSNHSsGCBaVMmTIOUzJwRemjjz6Shx56SGJjY6VUqVLJf8OwdetWadGihWTLlk2yZs2qrhTt3r3b5nUM9evXlx49eqgbGrncuXPL4MGDRdO05HU+++wzqVatmvpb2H5cnTpx4oRH+450jWeffVby5cunrlqVL19eFixYkPz4119/LXfddZd6j7DP48ePt3k+lr3xxhvSqVMniYuLU+8h9vvkyZPSunVrtaxixYqybt265OfgqigO2LgCh/cJr9ukSRM5ePCgzd9+77335M4771QnDnjfsb9m7rznW7ZskQcffFBtB/bxySeflFOnTtm8zy+++KK8+uqrkitXLvU+vv766zb7B3gNvJ5x352GzGi8fvvttxQN2axZs9RJ0bRp09T7+/jjj6vtmDBhglt/n4jCH9smtk1sm8gdDLIoZMTExKiDjGHZsmWy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",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, (q_ax, rbf_ax) = plt.subplots(1, 2, figsize=(10, 5))\n",
    "\n",
    "\n",
    "plot_features(q_ax, train_features_q, train_labels, 0, \"s\", \"w\", \"b\", \"A train\")\n",
    "plot_features(q_ax, train_features_q, train_labels, 1, \"o\", \"w\", \"r\", \"B train\")\n",
    "\n",
    "plot_features(q_ax, test_features_q, test_labels, 0, \"s\", \"b\", \"w\", \"A test\")\n",
    "plot_features(q_ax, test_features_q, test_labels, 1, \"o\", \"r\", \"w\", \"A test\")\n",
    "\n",
    "q_ax.set_ylabel(\"Principal component #1\")\n",
    "q_ax.set_xlabel(\"Principal component #0\")\n",
    "q_ax.set_title(\"Projection of training and test data\\n using KPCA with Quantum Kernel\")\n",
    "\n",
    "# Plotting the linear separation\n",
    "h = 0.01  # step size in the mesh\n",
    "\n",
    "# create a mesh to plot in\n",
    "x_min, x_max = train_features_q[:, 0].min() - 1, train_features_q[:, 0].max() + 1\n",
    "y_min, y_max = train_features_q[:, 1].min() - 1, train_features_q[:, 1].max() + 1\n",
    "xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
    "\n",
    "predictions = logistic_regression.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "\n",
    "# Put the result into a color plot\n",
    "predictions = predictions.reshape(xx.shape)\n",
    "q_ax.contourf(xx, yy, predictions, cmap=plt.cm.RdBu, alpha=0.2)\n",
    "\n",
    "plot_features(rbf_ax, train_features_rbf, train_labels, 0, \"s\", \"w\", \"b\", \"A train\")\n",
    "plot_features(rbf_ax, train_features_rbf, train_labels, 1, \"o\", \"w\", \"r\", \"B train\")\n",
    "plot_features(rbf_ax, test_features_rbf, test_labels, 0, \"s\", \"b\", \"w\", \"A test\")\n",
    "plot_features(rbf_ax, test_features_rbf, test_labels, 1, \"o\", \"r\", \"w\", \"A test\")\n",
    "\n",
    "rbf_ax.set_ylabel(\"Principal component #1\")\n",
    "rbf_ax.set_xlabel(\"Principal component #0\")\n",
    "rbf_ax.set_title(\"Projection of training data\\n using KernelPCA\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, the data points on the right figure are not separable, but they are on the left figure, hence in case of quantum kernel we can apply linear models on the transformed dataset and this is why SVM classifier works perfectly well on the _ad hoc_ dataset as we saw in the [classification section](#2.-Classification)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Conclusion\n",
    "\n",
    "In this tutorial:\n",
    "\n",
    "* We reviewed the fundamentals of quantum kernel learning\n",
    "* We understood how to define quantum kernels as instances of `FidelityQuantumKernel`\n",
    "* We learned how to use the `scikit-learn` `SVC` algorithm with a custom quantum kernel as a callable function vs precomputed quantum kernel matrix for classification\n",
    "* We learned how to train classifiers with the `QSVC` algorithm from `qiskit-machine-learning`\n",
    "* We learned how to use the `scikit-learn` `SpectralClustering` algorithms with a precomputed quantum kernel matrix for clustering\n",
    "* We investigated how to plug in a quantum kernel into `scikit-learn`'s `KernelPCA` algorithm and transform the ad-hoc dataset into a new one that can be tackled by a linear model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For further reference, `scikit-learn` has other algorithms that can use a precomputed kernel matrix, such as:\n",
    "\n",
    "- [Agglomerative clustering](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.AgglomerativeClustering.html)\n",
    "- [Support vector regression](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html)\n",
    "- [Ridge regression](https://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html)\n",
    "- [Gaussian process regression](https://scikit-learn.org/stable/modules/gaussian_process.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<h3>Version Information</h3><table><tr><th>Software</th><th>Version</th></tr><tr><td><code>qiskit</code></td><td>1.4.3</td></tr><tr><td><code>qiskit_machine_learning</code></td><td>0.9.0</td></tr><tr><th colspan='2'>System information</th></tr><tr><td>Python version</td><td>3.12.9</td></tr><tr><td>OS</td><td>Windows</td></tr><tr><td colspan='2'>Fri Jul 18 14:59:57 2025 Eastern Daylight Time</td></tr></table>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div style='width: 100%; background-color:#d5d9e0;padding-left: 10px; padding-bottom: 10px; padding-right: 10px; padding-top: 5px'><h3>This code is a part of a Qiskit project</h3><p>&copy; Copyright IBM 2017, 2025.</p><p>This code is licensed under the Apache License, Version 2.0. You may<br>obtain a copy of this license in the LICENSE.txt file in the root directory<br> of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.<p>Any modifications or derivative works of this code must retain this<br>copyright notice, and modified files need to carry a notice indicating<br>that they have been altered from the originals.</p></div>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import tutorial_magics\n",
    "\n",
    "%qiskit_version_table\n",
    "%qiskit_copyright"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
